package com.kun.springsecurity.controller;

import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author zhoukun
 * @Date 2021/2/15 15:36
 * 注解开发
 */
@RestController()
@RequestMapping("/test")
public class TestController {

    /**
     * （1）开启注解
     * 在启动类或者配置类等能够扫描的类上添加，这里直接在配置类上添加：
     * //开启Secured注解
     * @EnableGlobalMethodSecurity(securedEnabled = true,prePostEnabled = true)
     * @return
     */


    //@Secured是专门用于判断是否具有角色的，能写在方法或类上，参数要以 ROLE_开头。
    @Secured({"ROLE_admin"})
    @GetMapping("/hello")
    public String hello()
    {
        return "hello";
    }

    //表示访问方法或类在执行之前先判断权限，大多情况下都是使用这个注解，注解的参数和access()方法参数取值相同，都是权限表达式。
    @PreAuthorize("hasRole('ROLE_admin')")
    @GetMapping("/hello1")
    public String hello1()
    {
        return "hello1";
    }

    //表示方法或类执行结束后判断权限，此注解很少被使用到。
    @PreAuthorize("hasAuthority('admin')")
    @GetMapping("/hello2")
    public String hello2()
    {
        return "hello2";
    }
}
